package jwt

import "fmt"

// NewServiceForEmployee 获取员工JWT服务实例
func NewServiceForEmployee() Service {
	return &EmployeeImpl{}
}

// NewServiceForAdmin 获取管理员JWT服务实例
func NewServiceForAdmin() Service {
	return &AdminImpl{}
}

// GenerateToken 生成员工token
func (*EmployeeImpl) GenerateToken(employeeId string) (string, error) {
	// 检查 logger 是否为空
	if logger == nil {
		fmt.Println("logger is nil")
		return "", fmt.Errorf("logger is nil")
	}
	// 检查 employeeId 是否为空
	if employeeId == "" {
		logger.Errorf("employeeId is empty")
		return "", fmt.Errorf("employeeId is empty")
	}

	token, err := generateToken(employeeId, tokenTypeEmployee)
	if err != nil {
		logger.Errorf("failed to generate employee token: %v", err.Error())
		return "", err
	}

	if token == "" {
		logger.Errorf("generated token is empty")
		return "", fmt.Errorf("generated token is empty")
	}

	return token, nil
}

// GenerateToken 生成管理员token
func (*AdminImpl) GenerateToken(adminId string) (string, error) {
	// 检查 logger 是否为空
	if logger == nil {
		fmt.Println("logger is nil")
		return "", fmt.Errorf("logger is nil")
	}
	// 检查 adminId 是否为空
	if adminId == "" {
		logger.Errorf("adminId is empty")
		return "", fmt.Errorf("adminId is empty")
	}

	token, err := generateToken(adminId, tokenTypeAdmin)
	if err != nil {
		logger.Errorf("failed to generate admin token: %v", err.Error())
		return "", err
	}

	if token == "" {
		logger.Errorf("generated token is empty")
		return "", fmt.Errorf("generated token is empty")
	}

	return token, nil
}

// ParseAndVerifyToken 解析并验证员工token
func (*EmployeeImpl) ParseAndVerifyToken(tokenString string) (bool, error) {
	// 检查 logger 是否为空
	if logger == nil {
		fmt.Println("logger is nil")
		return false, fmt.Errorf("logger is nil")
	}
	// 检查 tokenString 是否为空
	if tokenString == "" {
		logger.Errorf("tokenString is empty")
		return false, fmt.Errorf("tokenString is empty")
	}

	// 解析token
	parsedToken, err := parseToken(tokenString)
	if err != nil {
		logger.Errorf("failed to parse token: %v", err.Error())
		return false, fmt.Errorf("failed to parse token: %v", err.Error())
	}

	// 验证token
	isValid, err := verifyToken(parsedToken, tokenTypeEmployee)
	if err != nil {
		logger.Errorf("failed to verify token: %v", err.Error())
		return false, fmt.Errorf("failed to verify token: %v", err.Error())
	}

	return isValid, nil
}

// ParseAndVerifyToken 解析并验证管理员token
func (*AdminImpl) ParseAndVerifyToken(tokenString string) (bool, error) {
	// 检查 logger 是否为空
	if logger == nil {
		fmt.Println("logger is nil")
		return false, fmt.Errorf("logger is nil")
	}
	// 检查 tokenString 是否为空
	if tokenString == "" {
		logger.Errorf("tokenString is empty")
		return false, fmt.Errorf("tokenString is empty")
	}

	// 解析token
	parsedToken, err := parseToken(tokenString)
	if err != nil {
		logger.Errorf("failed to parse token: %v", err.Error())
		return false, fmt.Errorf("failed to parse token: %v", err.Error())
	}

	// 验证token
	isValid, err := verifyToken(parsedToken, tokenTypeAdmin)
	if err != nil {
		logger.Errorf("failed to verify token: %v", err.Error())
		return false, fmt.Errorf("failed to verify token: %v", err.Error())
	}

	return isValid, nil
}

// GetIdFromToken 从员工token中获取员工ID
func (*EmployeeImpl) GetIdFromToken(tokenString string) (string, error) {
	// 检查 logger 是否为空
	if logger == nil {
		fmt.Println("logger is nil")
		return "", fmt.Errorf("logger is nil")
	}
	// 检查 tokenString 是否为空
	if tokenString == "" {
		logger.Errorf("tokenString is empty")
		return "", fmt.Errorf("tokenString is empty")
	}

	// 解析token
	parsedToken, err := parseToken(tokenString)
	if err != nil {
		logger.Errorf("failed to parse token: %v", err.Error())
		return "", fmt.Errorf("failed to parse token: %v", err.Error())
	}

	// 获取id
	id, err := getIdFromJwt(parsedToken)
	if err != nil {
		logger.Errorf("failed to get id from token: %v", err.Error())
		return "", fmt.Errorf("failed to get id from token: %v", err.Error())
	}

	return id, nil
}

// GetIdFromToken 从员工token中获取管理员ID
func (*AdminImpl) GetIdFromToken(tokenString string) (string, error) {
	// 检查 logger 是否为空
	if logger == nil {
		fmt.Println("logger is nil")
		return "", fmt.Errorf("logger is nil")
	}
	// 检查 tokenString 是否为空
	if tokenString == "" {
		logger.Errorf("tokenString is empty")
		return "", fmt.Errorf("tokenString is empty")
	}

	// 解析token
	parsedToken, err := parseToken(tokenString)
	if err != nil {
		logger.Errorf("failed to parse token: %v", err.Error())
		return "", fmt.Errorf("failed to parse token: %v", err.Error())
	}

	// 获取id
	id, err := getIdFromJwt(parsedToken)
	if err != nil {
		logger.Errorf("failed to get id from token: %v", err.Error())
		return "", fmt.Errorf("failed to get id from token: %v", err.Error())
	}

	return id, nil
}
